import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
// 导入获取用户信息接口 & 购物车数据
import { userInfo, cartList } from "@/api";
export default new Vuex.Store({
  state: {
    token: localStorage.getItem('token') ? localStorage.getItem('token') : '',
    isLogin: localStorage.getItem('isLogin') ? localStorage.getItem('isLogin') : false,
    userInfo: null,
    cartListS: [],    // 购物车的商品数
    badgeCount: 0,    // 购物车小圆点 信息
    allChecked: false    // 定义全选状态
  },
  getters: {
    getIsLogin(state) {
      // 返回登录状态
      // console.log(state.isLogin);
      return state.isLogin
    },
    getToken(state) {
      return state.token
    },
    getBadgeCount(state) {
      // 返回 购物车 小圆点 信息
      return state.badgeCount
    },
    getCartData(state) {
      return state.cartListS
    },
    // 直接 获取总价格， 当 cartList数据发生变化 总价计算逻辑 在使用总价格数据的时候 会重新执行
    //  总价格
    getCountPrice(state) {
      let countPrice = 0
      state.cartListS.forEach(item => {
        if (item.checked) {
          countPrice += (item.count * item.price)
        }
      })
      return countPrice
    }
  },
  mutations: {
    setToken(state, params) {
      // console.log("params", params);
      localStorage.setItem('token', params.token)
      localStorage.setItem('isLogin', true)
      state.token = params.token
      state.isLogin = true
    },
    // 设置用户信息
    userInfo(state, params) {
      state.userInfo = params
    },
    // 设置购物车数据
    cartList(state, params) {
      state.cartListS = params
    },
    // 设置购物车小圆点信息
    setBadgeCount(state, params) {
      console.log('params', params);
      state.badgeCount = params
    },
    setAllChecked(state, params) {
      state.allChecked = params
    },
    // 设置用户信息
    setUserInfo(state, params) {
      state.userInfo = params
    },
  },
  actions: {
    // 登录完成 获取用户信息
    getInfo(state) {
      userInfo(res => {
        state.commit('setUserInfo', res.data)
      })
    },
    getCartData(state) {
      cartList((res) => {
        // 从购物车数据中得到 总商品数据量
        if (res.status === 0) {
          const list = res.data
          let count = 0
          list.forEach(element => {
            // 得到每件商品的数据
            count += element.count
            element.checked = false
          });
          state.commit('setBadgeCount', count)
          state.commit('cartList', list)
        }
      });
    },
    // 处理单选事件
    changeChecked(state) {
      let checked = true
      state.getters.getCartData.forEach(item => {
        if (!item.checked) {
          checked = false
        }
      })
      state.commit('setAllChecked', checked)
    },
    // 处理全选事件
    changeAllChecked(data) {
      // data.state.cartListS 获取在 state 内的数据
      data.state.cartListS.forEach(item => {
        // 改变 购物车 数据的 选择状态
        item.checked = !data.state.allChecked
      })
      // 改变全选 状态
      data.commit('setAllChecked', !data.state.allChecked)
    }
  }
});
